Alexey Samsonov: #ifdefs out undefined function in static build of libc++ w/o RTTI. git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@176026 91177308-0d34-0410-b5e6-96231b3b80d8 
diff --git a/CMakeLists.txt b/CMakeLists.txt index c0bde09..8f5047c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt 
@@ -228,6 +228,10 @@  list(APPEND LIBCXX_CXX_FEATURE_FLAGS -DNDEBUG)  endif()  endif() +# Static library +if (NOT LIBCXX_ENABLE_SHARED) + list(APPEND LIBCXX_CXX_FEATURE_FLAGS -D_LIBCPP_BUILD_STATIC) +endif()    # This is the _ONLY_ place where add_definitions is called.  add_definitions( 
diff --git a/include/memory b/include/memory index f80d699..4e1f704 100644 --- a/include/memory +++ b/include/memory 
@@ -3629,10 +3629,13 @@  long use_count() const _NOEXCEPT {return __shared_count::use_count();}  __shared_weak_count* lock() _NOEXCEPT;   - // purposefully not protected with #ifndef _LIBCPP_NO_RTTI because doing so - // breaks ABI for those clients who need to compile their projects with - // -fno-rtti and yet link against a libc++.dylib compiled without -fno-rtti. + // Define the function out only if we build static libc++ without RTTI. + // Otherwise we may break clients who need to compile their projects with + // -fno-rtti and yet link against a libc++.dylib compiled + // without -fno-rtti. +#if !defined(_LIBCPP_NO_RTTI) || !defined(_LIBCPP_BUILD_STATIC)  virtual const void* __get_deleter(const type_info&) const _NOEXCEPT; +#endif  private:  virtual void __on_zero_shared_weak() _NOEXCEPT = 0;  };